home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Misc / Wood.0.72 / Sources / WoodDoc_Name.m < prev    next >
Encoding:
Text File  |  1995-07-30  |  2.4 KB  |  111 lines

  1. #import "wooddoc.h"
  2.  
  3. @implementation WoodDoc (Name)
  4.  
  5. static char         *defaultFormat        = NULL;        // Default title format
  6. static const char     *extension            = NULL;        // Document extension
  7.  
  8. + setDocExtension:(const char *)newExtension
  9. {
  10.     extension = newExtension;    
  11.     return self;
  12. }
  13.  
  14. + (const char *)docExtension
  15. {
  16.     return extension;
  17. }
  18.  
  19. + setDefaultTitleFormat:(const char *)newDefault
  20. {
  21.     char temp[MAXPATHLEN+1];
  22.     
  23.     if (defaultFormat) 
  24.         NX_FREE(defaultFormat);
  25.     sprintf(temp,"%s.%s",newDefault,[self docExtension]);
  26.     defaultFormat = NXCopyStringBufferFromZone(temp,[self zone]);
  27.     return self;
  28. }
  29.  
  30. + (const char *)defaultTitleFormat
  31. {
  32.     return defaultFormat;
  33. }
  34.  
  35. - (const char *)fileName
  36. {
  37.     static char filenameBuf[MAXPATHLEN+1];
  38.  
  39.     if (!directory && !name) 
  40.         [self setName:NULL andDirectory:NULL];
  41.     if (directory) {
  42.         strcpy(filenameBuf, directory);
  43.         strcat(filenameBuf, "/");
  44.     } else 
  45.         filenameBuf[0] = '\0';
  46.     if (name) 
  47.         strcat(filenameBuf, name);
  48.     return filenameBuf;
  49. }
  50.  
  51. - (const char *)directory
  52. {
  53.     return directory;
  54. }
  55.  
  56. - (const char *)name
  57. {
  58.     return name;
  59. }
  60.  
  61. - setName:(const char *)newName andDirectory:(const char *)newDirectory
  62. {
  63.     char newNameBuf[MAXPATHLEN+1];
  64.     static int uniqueCount = 1;
  65.  
  66.     if ((newName && *newName) || !name) {
  67.         if (!newName || !*newName) {
  68.             sprintf(newNameBuf, [[self class] defaultTitleFormat], uniqueCount++);
  69.             newName = newNameBuf;
  70.         } else if (name) 
  71.             NX_FREE(name);
  72.         name = NXCopyStringBufferFromZone(newName, [self zone]);
  73.     }
  74.     if ((newDirectory && (*newDirectory == '/')) || !directory) {
  75.         if (!newDirectory || (*newDirectory != '/')) 
  76.             newDirectory = [NXApp currentDirectory];
  77.         else if (directory) 
  78.             NX_FREE(directory);
  79.         directory = NXCopyStringBufferFromZone(newDirectory, [self zone]);
  80.     }
  81.     if(theOOEClient != nil || isOOEServer) {
  82.         [self setTitle_OOE:self];
  83.         return self;
  84.     }
  85.     [window setTitleAsFilename:[self fileName]];
  86.     NXNameZone([self zone], [self fileName]);
  87.     return self;
  88. }
  89.  
  90. - setName:(const char *)file
  91. {
  92.     char *lastComponent;
  93.     char path[MAXPATHLEN+1];
  94.  
  95.     if (file) {
  96.         strcpy(path, file);
  97.         lastComponent = rindex(path, '.');
  98.         if(lastComponent && !strcmp(lastComponent + 1, "diagram2"))
  99.             return self;
  100.         lastComponent = rindex(path, '/');
  101.         if (lastComponent) {
  102.             *lastComponent++ = '\0';
  103.             return [self setName:lastComponent andDirectory:path];
  104.         } else 
  105.             return [self setName:file andDirectory:NULL];
  106.     }
  107.     return self;
  108. }
  109.  
  110. @end
  111.